<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>
<body>
  <div id="app">
    <h2>组件传参-子传父</h2>
    <father></father>
  </div>

  <script src="../vue3.js"></script>
  <script>
    // 如果要做子传父
    /*
      步骤：
        1. 先在子组件去触发父组件的事件
          1.1 在父组件的子组件标签上面，添加自定义事件
          1.2 在子组件使用this.$emit()去触发父组件的事件
        2. 通过函数传参的方式，从子组件传递给父组件
    */
    const {createApp} = Vue;

    const Son = {
      data() {
        return {
          count: 999
        }
      },
      template: `
        <div>
          <div>这是子组件</div>
          <button @click="handleClick">按钮</button>
        </div>
      `,
      methods: {
        handleClick() {
          this.$emit("abc", this.count);
        }
      },
      // this.$emit()调用既可以在方法中，也可以在生命周期中
      // this.$emit()理论上可以传无数个参数
      // 更建议用对象去传一个参数(对象风格的传参方式)
      mounted() {
        this.$emit("abc", {count: this.count, n: 111});
      }
    }

    const Father = {
      components: {
        Son
      },
      template: `
        <div>
          <div>这是父组件</div>
          <son @abc="fn"></son>
        </div>
      `,
      methods: {
        fn(obj) {
          console.log("fn", obj);
        }
      }
    }

    

    const app = createApp({
      components: {
        Father
      }
    });

    app.mount("#app");
  </script>
</body>
</html>